package com.bbva.general.util;

import java.io.File;
import java.util.Calendar;
import java.util.Date;
import org.apache.log4j.Logger;
import com.bbva.general.dao.CargaDAO;
import com.bbva.general.dao.DetalleCargaDAO;
import com.bbva.general.entities.ArchivoCarga;
import com.bbva.general.entities.Carga;
import com.bbva.general.entities.DetalleCarga;
import com.bbva.general.process.CargaFeriados;
import com.bbva.general.process.CargaFormato50;
import com.bbva.general.process.CargaFormato51;
import com.bbva.general.process.CargaFormato80;
import com.bbva.general.process.CargaFormato81;
import com.bbva.general.process.CargaTerritorio;
import com.bbva.general.process.CargaUbigeo;
import com.bbva.general.process.CargaProducto;
import com.bbva.general.process.CargaOfigru;

public class CargaAutomaticaUtil {
	
	
	public static boolean UploadNextDocument(ArchivoCarga archivo,int intTypeDocument, Object objTipoCarga ){
		boolean bolUpload=false;
		int contador=1;
		boolean bolFindLastDocument=false;
			Calendar cal = Calendar.getInstance();
				while(bolFindLastDocument==false){
					 cal.add(Calendar.DATE, -1);
					 Date dayBeforeYesterday = cal.getTime();
					 String strDiaActual = "0" + cal.get(Calendar.DATE);
					 String strMes = "0" + (cal.get(Calendar.MONTH) + 1);
					 String strAno = "" + cal.get(Calendar.YEAR);
					 String strRutaArchivo = archivo.getRutaArchivo();
					 String strNombreArchivo = strAno.substring(2, 4) + (strMes.substring(strMes.length() - 2)) + (strDiaActual.substring(strDiaActual.length() - 2)) + "." + archivo.getExtensionArchivo();
					 String strNombreCompletoArchivo = strRutaArchivo + archivo.getNombreArchivo() + "_" + strNombreArchivo;
					 boolean existsArchivo = (new File(strNombreCompletoArchivo)).exists();
					 if (existsArchivo)
						{//validando
						 switch(intTypeDocument){
						
							 case 1:	CargaFormato50 carga50= (CargaFormato50)objTipoCarga;
								 		carga50.CargarArchivo50(strNombreCompletoArchivo, dayBeforeYesterday, Constantes.TIPO_CARGA_AUTOMATICA);
										bolFindLastDocument=true;
										bolUpload=true;
										break;
							 case 2:	CargaFormato51 carga51=(CargaFormato51) objTipoCarga;
							 			carga51.CargarArchivo51(strNombreCompletoArchivo, dayBeforeYesterday, Constantes.TIPO_CARGA_AUTOMATICA);
						 				bolFindLastDocument=true;
						 				bolUpload=true;
						 				break;	
							 case 3:	CargaFeriados cargaFeriados= (CargaFeriados) objTipoCarga;
							 			cargaFeriados.Cargar(strNombreCompletoArchivo, dayBeforeYesterday, Constantes.TIPO_CARGA_AUTOMATICA);
						 				bolFindLastDocument=true;
						 				bolUpload=true;
						 				break;
							 case 4:	CargaUbigeo cargaUbigeo= (CargaUbigeo) objTipoCarga;;
							 			cargaUbigeo.Cargar(strNombreCompletoArchivo, dayBeforeYesterday, Constantes.TIPO_CARGA_AUTOMATICA);
						 				bolFindLastDocument=true;
						 				bolUpload=true;
						 				break;	
							 case 5:	CargaTerritorio cargaTerritorio= (CargaTerritorio) objTipoCarga;;
							 			cargaTerritorio.Cargar(strNombreCompletoArchivo, dayBeforeYesterday, Constantes.TIPO_CARGA_AUTOMATICA);
						 				bolFindLastDocument=true;
						 				bolUpload=true;
						 				break;	
							 case 6:	CargaFormato80 carga80= (CargaFormato80) objTipoCarga;						 				
						 				carga80.CargarArchivo80(strNombreCompletoArchivo, dayBeforeYesterday, Constantes.TIPO_CARGA_AUTOMATICA);
				 						bolFindLastDocument=true;
				 						bolUpload=true;
				 						break;	
							 case 7:	CargaFormato81 carga81= (CargaFormato81) objTipoCarga;
							 			carga81.CargarArchivo81(strNombreCompletoArchivo, dayBeforeYesterday, Constantes.TIPO_CARGA_AUTOMATICA);
						 				bolFindLastDocument=true;
						 				bolUpload=true;
						 				break;		
							 case 8:	CargaProducto cargaProducto= (CargaProducto) objTipoCarga;
							 			cargaProducto.CargarProducto(strNombreCompletoArchivo, dayBeforeYesterday, Constantes.TIPO_CARGA_AUTOMATICA);
						 				bolFindLastDocument=true;
						 				bolUpload=true;
						 				break;	
							 case 9:	CargaOfigru cargaOfigru= (CargaOfigru) objTipoCarga;
					 			cargaOfigru.CargarOfigru(strNombreCompletoArchivo, dayBeforeYesterday, Constantes.TIPO_CARGA_AUTOMATICA);
				 				bolFindLastDocument=true;
				 				bolUpload=true;
				 				break;	
						 	}
					}else{
								if (contador<=50) {
									bolFindLastDocument=false;
									cal.setTime(dayBeforeYesterday);
								}else{
									bolFindLastDocument=true;
									bolUpload=false;
								}
					 	}
					contador++;	
				}
			return bolUpload;
	}
	
	public static void cargaArchivoNoexiste(Date fechaCargaDate,String strRutaArchivo,String strNombreArchivo,int idArchivo, CargaDAO cargaDAO, DetalleCargaDAO detalleCargaDAO)
	{
		Carga objCarga = new Carga();
		String strIdCarga = "";
		
		switch (idArchivo) {
		case 1:
			objCarga.setIdArchivoCarga(Constantes.IDARCHIVO_FORMATO50);
			break;
		case 2:
			objCarga.setIdArchivoCarga(Constantes.IDARCHIVO_FORMATO51);
			break;
		case 3:
			objCarga.setIdArchivoCarga(Constantes.IDARCHIVO_FERIADOS);
			break;
		case 4:
			objCarga.setIdArchivoCarga(Constantes.IDARCHIVO_UBIGEO);
			break;
		case 5:
			objCarga.setIdArchivoCarga(Constantes.IDARCHIVO_TERRITORIO);
			break;
		case 6:
			objCarga.setIdArchivoCarga(Constantes.IDARCHIVO_FORMATO80);
			break;
		case 7:
			objCarga.setIdArchivoCarga(Constantes.IDARCHIVO_FORMATO81);
			break;
		case 8:
			objCarga.setIdArchivoCarga(Constantes.IDARCHIVO_PRODUCTO);
			break;
		case 9:
			objCarga.setIdArchivoCarga(Constantes.IDARCHIVO_OFIGRU);
			break;
		default:
			break;
		}
		try {
			objCarga.setFechaCarga(fechaCargaDate);
			objCarga.setRutaArchivo(strRutaArchivo);
			objCarga.setNombreArchivo(strNombreArchivo);
			objCarga.setIdEstadoProceso(Constantes.ESTADO_PROCESO_FALLIDO);
			objCarga.setIdTipoCarga(1);
			objCarga.setHoraInicio(Fecha.ObtenerHoraActual());
			objCarga.setNotaError("El archivo no fue encontrado, no se cargaron registros.");
			strIdCarga = cargaDAO.Insertar(objCarga);
			
		} catch (Exception e) {
			System.out.println("Error en carga Automatica Tabla Carga: "+e.getMessage());
		}
		//INSERT DATOS TABLA DETALLE CARGA
		try {
			DetalleCarga objDetalle = new DetalleCarga();
			objDetalle.setIdCarga(strIdCarga);
			objDetalle.setIdentificador("1");
			objDetalle.setMensajeError("El archivo no fue encontrado, no se cargaron registros. ");
			objDetalle.setUsuarioCreacion(Constantes.USUARIO_CREACION);
			detalleCargaDAO.Insertar(objDetalle);
			//JUtil.mostrarMensajeExcepcion(e, this.getClass().toString());
		} catch (Exception e) {
			System.out.println("Error en carga Automatica Tabla Detalle: "+e.getMessage());
		}
		//ACTUALIZACION DE DETALLE CARGA	
		try {
			objCarga.setIdCarga(strIdCarga);
			objCarga.setHoraFin(Fecha.ObtenerHoraActual());
			objCarga.setRegistrosLeidos(0);
			objCarga.setRegistrosCargados(0);
			objCarga.setNotaError("El archivo no fue encontrado, no se cargaron registros.");
			objCarga.setUsuarioModificacion(Constantes.USUARIO_CREACION);
			cargaDAO.Actualiza(objCarga);
		} catch (Exception e) {
			System.out.println("Error en actualizacion Automatica Tabla Detalle: "+e.getMessage());
		}
	}
	
	
	
}